package com.xiaolin.structure.graph.matrix;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @ClassName MyGraph
 * @Description 邻接矩阵实现图
 * @Detail detail
 * @Author MyPC
 * @Date 2020/11/17
 * @Version 1.0
 */
public class MyGraph {
    // 存储顶点信息
    private List<String> vertexList;
    //存储边
    private int[][] edges;
    // 边的数量
    private int edgeNumber;

    public MyGraph(int num){
        //顶点个数先确定
        vertexList=new ArrayList<>(num);
        //初始哈一个邻接矩阵，矩阵长、宽与图个数保持一致
        edges=new int[num][num];
        //边数初始化为零
        edgeNumber=0;
    }

    /**
     * 返回顶点个数
     * @return
     */
    public int getSize(){
        return vertexList.size();
    }

    /**
     * 返回边数
     * @return
     */
    public int getEdgeNumber() {
        return edgeNumber;
    }

    public List<String> getVertexList() {
        return vertexList;
    }

    /**
     * 添加顶点
     * @param vertex
     */
    public void addVertex(String vertex){
        vertexList.add(vertex);
    }

    /**
     * 添加边
     * @param v1  第一个顶点的索引，顶点在邻接矩阵的索引与vertexList的索引一一对应
     * @param v2 第二个顶点的索引
     * @param weight 两个顶点的权值
     */
    public void insertVertex(int v1,int v2,int weight){
        edges[v1][v2]=weight;
        edges[v2][v1]=weight;
        edgeNumber++;
    }

    /**
     * 根据索引下标获取元素
     * @param index
     * @return
     */
    public String get(int index){
        return vertexList.get(index);
    }

    /**
     * 获取两个顶点间的权值
     * @param v1
     * @param v2
     * @return
     */
    public int getWeight(int v1,int v2){
        return edges[v1][v2];
    }

    /**
     * 遍历图
     */
    public void list(){
        for(int i=0;i<edges.length;i++){
            System.out.println(Arrays.toString(edges[i]));
        }
    }

}
